typedef struct _tagIRayVariant
{
	enum IRAY_VAR_TYPE vt;
	struct
	{
		int   nVal;
		float fVal;
		char  strVal[IRAY_MAX_STR_LEN];
	}val;
}IRayVariant;

typedef struct _tagDeviceIDInfo
{
	//IRayVariant IDInfo[2]; //assume there are at most 2 property to identify a device
	IRayVariant IDInfo[2];
}DeviceIDInfo;

class CInterface
{
	virtual ~IFpdConnection() {}
	virtual int Func1() = 0;
	virtual int Func2() = 0;
	virtual int Func3() = 0;
	virtual int Func4() = 0;
	virtual int Func5() = 0;
	virtual int Func6() = 0;
	virtual int Func7() = 0;
	virtual int Func8() = 0;
	virtual int Func9() = 0;
	virtual int Func10() = 0;
	virtual int Func11() = 0;
	virtual int Func12() = 0;
	virtual int Func13() = 0;
	virtual int EnumerateDevice(DeviceIDInfo *pDeviceIDInfoList, int *nCount) = 0;
};

CInstance: public CInterface
{
public:
	virtual int Func1() {return 0};
	virtual int Func2() {return 0};
	virtual int Func3() {return 0};
	virtual int Func4() {return 0};
	virtual int Func5() {return 0};
	virtual int Func6() {return 0};
	virtual int Func7() {return 0};
	virtual int Func8() {return 0};
	virtual int Func9() {return 0};
	virtual int Func10(){return 0};
	virtual int Func11(){return 0};
	virtual int Func12(){return 0};
	virtual int Func13(){return 0};
	virtual int EnumerateDevice(DeviceIDInfo *pDeviceIDInfoList, int *nCount)
	{
		return 0;
	}
};

CONNECTION_EXPORT CInterface* CreateObj()
{
	return new CInstance();
}

CONNECTION_EXPORT void DestroyObj(CInterface* pExport)
{
	CInstance* p = static_cast<CInstance*>(pExport);
	DELETE_NULL(p);
}